<?php

/**
 * @package     JohnCMS
 * @link        http://johncms.com
 * @copyright   Copyright (C) 2008-2011 JohnCMS Community
 * @license     LICENSE.txt (see attached file)
 * @version     VERSION.txt (see attached file)
 * @author      http://johncms.com/about
 */

define('_IN_JOHNCMS', 1);
$headmod = 'guestbook';
require('../incfiles/core.php');
if (isset($_SESSION['ref']))
    unset($_SESSION['ref']);
    
/*
-----------------------------------------------------------------
 Initialization (блок объявления и иниалициализации переменных)
-----------------------------------------------------------------
*/

$max_symbols = $rights < 1 ? 500 : 2500;           //Задаем максимальное кол-во символов
$name_table = '`guest`';                           //Задаем название таблицы


// Проверяем права доступа в Админ-Клуб
if (isset($_SESSION['ga']) && $rights < 1)
    unset($_SESSION['ga']);

// Задаем заголовки страницы
$textl = isset($_SESSION['ga']) ? $lng['admin_club'] : $lng['guestbook'];
require('../incfiles/head.php');

// Если гостевая закрыта, выводим сообщение и закрываем доступ (кроме Админов)
if (!$set['mod_guest'] && $rights < 7) {
    echo '<div class="rmenu"><p>' . $lng['guestbook_closed'] . '</p></div>';
    require('../incfiles/end.php');
    exit;
}

switch ($act) {
    case 'delpost': {
        /*
        -----------------------------------------------------------------
        Удаление отдельного поста
        -----------------------------------------------------------------
        */
        if ($rights >= 6 && $id) {
            if (isset($_GET['yes'])) {
                mysql_query("DELETE FROM " . $name_table . " WHERE `id`='" . $id . "'");
                header("Location: index.php");
            } else {
                echo '<div class="phdr"><a href="index.php"><b>' . $lng['guestbook'] . '</b></a> | ' . $lng['delete_message'] . '</div>' .
                     '<div class="rmenu"><p>' . $lng['delete_confirmation'] . '?<br/>' .
                     '<a href="index.php?act=delpost&amp;id=' . $id . '&amp;yes">' . $lng['delete'] . '</a> | ' .
                     '<a href="index.php">' . $lng['cancel'] . '</a></p></div>';
            }
        }
    }
    break;

    case 'say': {
        /*
        -----------------------------------------------------------------
        Добавление нового поста
        -----------------------------------------------------------------
        */
        $admset = isset($_SESSION['ga']) ? 1 : 0; // Задаем куда вставляем, в Админ клуб (1), или в Гастивуху (0)
        // Принимаем и обрабатываем данные
        $name = isset($_POST['name']) ? mb_substr(trim($_POST['name']), 0, 20) : '';
        $msg = isset($_POST['msg']) ? mb_substr(trim($_POST['msg']), 0, $max_symbols) : '';
        $trans = isset($_POST['msgtrans']) ? 1 : 0;
        $code = isset($_POST['code']) ? trim($_POST['code']) : '';
        $from = $user_id ? $login : mysql_real_escape_string($name);
        // Транслит сообщения
        if ($trans)
            $msg = functions::trans($msg);
        // Проверяем на ошибки
        $error = array();
        $flood = false;
        if (!$user_id && empty($_POST['name']))
            $error[] = $lng['error_empty_name'];
        if (empty($_POST['msg']))
            $error[] = $lng['error_empty_message'];
        if ($ban['1'] || $ban['13'])
            $error[] = $lng['access_forbidden'];
        // CAPTCHA для гостей
        if (!$user_id && (empty($code) || mb_strlen($code) < 4 || $code != $_SESSION['code']))
            $error[] = $lng['error_wrong_captcha'];
        unset($_SESSION['code']);
        if ($user_id) {
            // Антифлуд для зарегистрированных пользователей
            $flood = functions::antiflood();
        } else {
            // Антифлуд для гостей
            $req = mysql_query("SELECT `time` FROM " . $name_table . " WHERE `ip` = '$ip' AND `browser` = '" . mysql_real_escape_string($agn) . "' AND `time` > '" . (time() - 60) . "'");
            if (mysql_num_rows($req)) {
                $res = mysql_fetch_assoc($req);
                $flood = time() - $res['time'];
            }
        }
        if ($flood)
            $error = $lng['error_flood'] . ' ' . $flood . '&#160;' . $lng['seconds'];
        if (!$error) {
            // Проверка на одинаковые сообщения
            $req = mysql_query("SELECT * FROM " . $name_table . " WHERE `user_id` = '$user_id' ORDER BY `time` DESC");
            $res = mysql_fetch_array($req);
            if ($res['text'] == $msg) {
                header("location: index.php");
                exit;
            }
        }
        if (!$error) {
            // Вставляем сообщение в базу
            mysql_query("INSERT INTO " . $name_table . " SET
                `adm` = '$admset',
                `time` = '" . time() . "',
                `user_id` = '$user_id',
                `name` = '$from',
                `text` = '" . mysql_real_escape_string($msg) . "',
                `ip` = '" . core::$ip . "',
                `browser` = '" . mysql_real_escape_string($agn) . "'
            ");
            // Фиксируем время последнего поста (антиспам)
            if ($user_id) {
                $postguest = $datauser['postguest'] + 1;
                mysql_query("UPDATE `users` SET `postguest` = '$postguest', `lastpost` = '" . time() . "' WHERE `id` = '$user_id'");
            }
            header('location: index.php');
        } else {
            echo functions::display_error($error, '<a href="index.php">' . $lng['back'] . '</a>');
        }
    }
    break;

    case 'otvet': {
        /*
        -----------------------------------------------------------------
        Добавление "ответа Админа"
        -----------------------------------------------------------------
        */
        if ($rights >= 6 && $id) {
            if (isset($_POST['submit'])) {
                mysql_query("UPDATE " . $name_table . " SET
                    `admin` = '$login',
                    `otvet` = '" . mysql_real_escape_string(mb_substr($_POST['otv'], 0, $max_symbols)) . "',
                    `otime` = '" . time() . "'
                    WHERE `id` = '$id'
                ");
                header("location: index.php");
            } else {
                echo '<div class="phdr"><a href="index.php"><b>' . $lng['guestbook'] . '</b></a> | ' . $lng['reply'] . '</div>';
                $req = mysql_query("SELECT * FROM " . $name_table . " WHERE `id` = '$id'");
                $res = mysql_fetch_assoc($req);
                echo '<div class="menu">' .
                     '<div class="quote"><b>' . $res['name'] . '</b>' .
                     '<br />' . functions::checkout($res['text']) . '</div>' .
                     '<form name="form" action="index.php?act=otvet&amp;id=' . $id . '" method="post">' .
                     '<p><h3>' . $lng['reply'] . '</h3>' . bbcode::auto_bb('form', 'otv') .
                     '<textarea rows="' . $set_user['field_h'] . '" name="otv" style="width: 99%;">' . functions::checkout($res['otvet']) . '</textarea></p>' .
                     '<p><input type="submit" name="submit" value="' . $lng['reply'] . '"/></p>' .
                     '</form></div>' .
                     '<div class="phdr"><a href="faq.php?act=trans">' . $lng['translit'] . '</a> | <a href="faq.php?act=smileys">' . $lng['smileys'] . '</a></div>' .
                     '<p><a href="index.php">' . $lng['back'] . '</a></p>';
            }
        }
    }
    break;

    case 'edit': {
        /*
        -----------------------------------------------------------------
        Редактирование поста
        -----------------------------------------------------------------
        */
        if ($rights >= 6 && $id) {
            if (isset($_POST['submit'])) {
                $req = mysql_query("SELECT `edit_count` FROM " . $name_table . " WHERE `id`='$id'");
                $res = mysql_fetch_array($req);
                $edit_count = $res['edit_count'] + 1;
                $msg = mb_substr($_POST['msg'], 0, $max_symbols);
                mysql_query("UPDATE " . $name_table . " SET
                    `text` = '" . mysql_real_escape_string($msg) . "',
                    `edit_who` = '$login',
                    `edit_time` = '" . time() . "',
                    `edit_count` = '$edit_count'
                    WHERE `id` = '$id'
                ");
                header("location: index.php");
            } else {
                $req = mysql_query("SELECT * FROM " . $name_table . " WHERE `id` = '$id'");
                $res = mysql_fetch_assoc($req);
                $text = htmlentities($res['text'], ENT_QUOTES, 'UTF-8');
                echo '<div class="phdr"><a href="index.php"><b>' . $lng['guestbook'] . '</b></a> | ' . $lng['edit'] . '</div>' .
                     '<div class="rmenu">' .
                     '<form action="index.php?act=edit&amp;id=' . $id . '" method="post">' .
                     '<p><b>' . $lng['author'] . ':</b> ' . $res['name'] . '</p>' .
                     '<p><textarea rows="' . $set_user['field_h'] . '" name="msg" style="width: 99%;">' . $text . '</textarea></p>' .
                     '<p><input type="submit" name="submit" value="' . $lng['save'] . '"/></p>' .
                     '</form></div>' .
                     '<div class="phdr"><a href="faq.php?act=trans">' . $lng['translit'] . '</a> | <a href="faq.php?act=smileys">' . $lng['smileys'] . '</a></div>' .
                     '<p><a href="index.php">' . $lng['back'] . '</a></p>';
            }
        }
    }
    break;

    case 'clean': {
        /*
        -----------------------------------------------------------------
        Очистка Гостевой
        -----------------------------------------------------------------
        */
        if ($rights >= 7) {
            if (isset($_POST['submit'])) {
                // Проводим очистку Гостевой, согласно заданным параметрам
                $adm = isset($_SESSION['ga']) ? 1 : 0;
                $cl = isset($_POST['cl']) ? intval($_POST['cl']) : '';
                switch ($cl) {
                    case '1':
                        // Чистим сообщения, старше 1 дня
                        mysql_query("DELETE FROM " . $name_table . " WHERE `adm`='$adm' AND `time` < '" . (time() - 86400) . "'");
                        echo '<p>' . $lng['clear_day_ok'] . '</p>';
                        break;

                    case '2':
                        // Проводим полную очистку
                        mysql_query("DELETE FROM " . $name_table . " WHERE `adm`='$adm'");
                        echo '<p>' . $lng['clear_full_ok'] . '</p>';
                        break;
                    default :
                        // Чистим сообщения, старше 1 недели
                        mysql_query("DELETE FROM " . $name_table . " WHERE `adm`='$adm' AND `time`<='" . (time() - 604800) . "';");
                        echo '<p>' . $lng['clear_week_ok'] . '</p>';
                }
                mysql_query("OPTIMIZE TABLE " . $name_table . "");
                echo '<p><a href="index.php">' . $lng['guestbook'] . '</a></p>';
            } else {
                // Запрос параметров очистки
                echo '<div class="phdr"><a href="index.php"><b>' . $lng['guestbook'] . '</b></a> | ' . $lng['clear'] . '</div>' .
                     '<div class="menu">' .
                     '<form id="clean" method="post" action="index.php?act=clean">' .
                     '<p><h3>' . $lng['clear_param'] . '</h3>' .
                     '<input type="radio" name="cl" value="0" checked="checked" />' . $lng['clear_param_week'] . '<br />' .
                     '<input type="radio" name="cl" value="1" />' . $lng['clear_param_day'] . '<br />' .
                     '<input type="radio" name="cl" value="2" />' . $lng['clear_param_all'] . '</p>' .
                     '<p><input type="submit" name="submit" value="' . $lng['clear'] . '" /></p>' .
                     '</form></div>' .
                     '<div class="phdr"><a href="index.php">' . $lng['cancel'] . '</a></div>';
            }
        }
    }
    break;

    case 'ga': {
        /*
        -----------------------------------------------------------------
        Переключение режима работы Гостевая / Админ-клуб
        -----------------------------------------------------------------
        */
        if ($rights >= 1) {
            if (isset($_GET['do']) && $_GET['do'] == 'set') {
                $_SESSION['ga'] = 1;
            } else {
                unset($_SESSION['ga']);
            }
        }
    } // break'a нет, так как сразу же отображаем и гостевую
    
    default: {
        /*
        -----------------------------------------------------------------
        Отображаем Гостевую, или Админ клуб
        -----------------------------------------------------------------
        */
		
		//Если гостевая закрыта
        if (!$set['mod_guest'])
            echo '<div class="alarm">' . $lng['guestbook_closed'] . '</div>';
			
		//Выводим заголовок ("Гостевая" или "Админ-клуб")
        echo '<div class="phdr" id="phdrUp">';
		if (isset($_SESSION['ga'])) {
			echo '<b>' . $lng['admin_club'] . '</b> | <b><a href="index.php?act=ga">' . $lng['guestbook'] . '</a></b>';
		} else {
			echo '<b>' . $lng['guestbook'] . '</b>';
			if (!($rights < 1 || !$user_id)) {
				echo ' | <b><a href="index.php?act=ga&amp;do=set">' . $lng['admin_club'] . '</a></b>';
			}
		}
		if (!($rights < 7 || !$user_id)) {
			echo ' | ' . '<b><a href="index.php?act=clean">' . $lng['clear'] . '</a></b>';
		}
		echo '</div>';
		
        // Форма ввода нового сообщения
        if (($user_id || $set['mod_guest'] == 2) && !isset($ban['1']) && !isset($ban['13'])) {
            echo '<div class="gmenu"><form name="form" action="index.php?act=say" method="post">';
            
			//Если гость - выводим форму ввода имени гостя
			if (!$user_id) echo $lng['name'] . ' (max 25):<br/><input type="text" name="name" maxlength="25"/><br/>';
            
			echo '<b>' . $lng['message'] . '</b> <small>(max ' . $max_symbols . ')</small>:<br/>';
            
			//Покажем панель бб кодов
			echo bbcode::auto_bb('form', 'msg');
            
			//Стандартная форма ввода сообщения
			echo '<div align="center"><textarea rows="' . ($set_user['field_h'] + ($is_mobile ? 0 : 2)) . '" name="msg" style="width: 98%;"></textarea></div>';
			
            //Покажем панель смайлов
            echo bbcode::auto_smile('form', 'msg');
            
			//Нахуй убираем некий транслит
			//if ($set_user['translit']) echo '<input type="checkbox" name="msgtrans" value="1" />&nbsp;' . $lng['translit'] . '<br/>';
            
			//CAPTCHA для гостей
			if (!$user_id) {
                echo '<img src="../captcha.php?r=' . rand(1000, 9999) . '" alt="' . $lng['captcha'] . '"/><br />';
                echo '<input type="text" size="5" maxlength="5"  name="code"/>&#160;' . $lng['captcha'] . '<br />';
            }
			
			//Кнопка "Отправить", конец формы и блока
            echo '<input type="submit" name="submit" value="' . $lng['sent'] . '"/></form></div>';
        } else {
            // Если гостевая закрыта, чувак забанен или еще что, выводим ошибку
			echo '<div class="rmenu">' . $lng['access_guest_forbidden'] . '</div>';
        }
        
		//Читаем данные из базы
        if (isset($_SESSION['ga']) && $rights >= "1") {
            //Читаем админку
			$req = mysql_query("SELECT COUNT(*) FROM " . $name_table . " WHERE `adm`='1'");
        } else {
			//Читаем гостевую
            $req = mysql_query("SELECT COUNT(*) FROM " . $name_table . " WHERE `adm`='0'");
        }
		//Выбираем результат
        $total = mysql_result(mysql_query("SELECT COUNT(*) FROM " . $name_table . " WHERE `adm`='" . (isset($_SESSION['ga']) ? 1 : 0) . "'"), 0);
        
		
		//Блок "Комментарии"
        echo '<div class="phdr" id="phdrAll"><b>' . $lng['comments'] . '</b></div>';
        
		//Если гостевая не пуста
        if ($total) {
			//Запрос для Админ клуба
            if (isset($_SESSION['ga']) && $rights >= "1") {
                //echo '<div class="rmenu"><b>АДМИН-КЛУБ</b></div>';
                $req = mysql_query("SELECT " . $name_table . ".*, " . $name_table . ".`id` AS `gid`, `users`.`rights`, `users`.`lastdate`, `users`.`sex`, `users`.`status`, `users`.`datereg`, `users`.`id`
                FROM " . $name_table . " LEFT JOIN `users` ON " . $name_table . ".`user_id` = `users`.`id`
                WHERE " . $name_table . ".`adm`='1' ORDER BY `time` DESC LIMIT $start, $kmess");
            } else {
                //Запрос для обычной Гостевой
                $req = mysql_query("SELECT " . $name_table . ".*, " . $name_table . ".`id` AS `gid`, `users`.`rights`, `users`.`lastdate`, `users`.`sex`, `users`.`status`, `users`.`datereg`, `users`.`id`
                FROM " . $name_table . " LEFT JOIN `users` ON " . $name_table . ".`user_id` = `users`.`id`
                WHERE " . $name_table . ".`adm`='0' ORDER BY `time` DESC LIMIT $start, $kmess");
            }
			
            $i = 0;
            while (($res = mysql_fetch_assoc($req)) !== false) {
                $text = '';
                echo $i % 2 ? '<div class="list2">' : '<div class="list1">';
                
				//Запрос по гостям
				if (empty($res['id'])) {
                    $req_g = mysql_query("SELECT `lastdate` FROM `cms_guests` WHERE `session_id` = '" . md5($res['ip'] . $res['browser']) . "' LIMIT 1");
                    $res_g = mysql_fetch_assoc($req_g);
                    $res['lastdate'] = $res_g['lastdate'];
                }
                
				//Вывод поста пользователя:
				//Время создания поста
                $text = ' <span class="gray">(' . functions::display_date($res['time']) . ')</span>';
                
				//Для зарегистрированных показываем ссылки и смайлы
				if ($res['user_id']) {
                    $post = functions::checkout($res['text'], 1, 1);
                    if ($set_user['smileys'])
                        $post = functions::smileys($post, $res['rights'] >= 1 ? 1 : 0);
                } else {
                    //Для гостей обрабатываем имя и фильтруем ссылки
                    $res['name'] = functions::checkout($res['name']);
                    $post = functions::antilink(functions::checkout($res['text'], 0, 2));
                }
				
				//Если пост редактировался, показываем кем и когда
                /*if ($res['edit_count']) {
                    $post .= '<br /><span class="gray"><small>Изм. <b>' . $res['edit_who'] . '</b> (' . functions::display_date($res['edit_time']) . ') <b>[' . $res['edit_count'] . ']</b></small></span>';
                }*/
				
				//Ответ Администрации
                if (!empty($res['otvet'])) {
                    $otvet = functions::checkout($res['otvet'], 1, 1);
                    if ($set_user['smileys'])
                        $otvet = functions::smileys($otvet, 1);
                    $post .= '<div class="reply"><b>' . $res['admin'] . '</b>: (' . functions::display_date($res['otime']) . ')<br/>' . $otvet . '</div>';
                }
				
				//Дополнительные опции для "Ответа Администрации"
                if ($rights >= 6) {
                    $subtext = '<a href="index.php?act=otvet&amp;id=' . $res['gid'] . '">' . $lng['reply'] . '</a>' .
                               ($rights >= $res['rights'] ? ' | <a href="index.php?act=edit&amp;id=' . $res['gid'] . '">' . $lng['edit'] . '</a> | <a href="index.php?act=delpost&amp;id=' . $res['gid'] . '">' . $lng['delete'] . '</a>' : '');
                } else {
                    $subtext = '';
                }
				
				//
                $arg = array(
                    'header' => $text,
                    'body' => $post,
                    'sub' => $subtext
                );
                echo functions::display_user($res, $arg);
                echo '</div>';
				
				//echo '<div class="rmenu">' . $text . '<br>' . $post . "<br>" . $subtext . "</div>";
				
                ++$i;
            }
        } else {
			//Пишем, что гостевая пуста
            echo '<div class="menu"><p>' . $lng['guestbook_empty'] . '</p></div>';
        }
		
		//Выводим кол-во сообщений
        echo '<div class="phdr" id="phdrDown">' . $lng['total'] . ': ' . $total . '</div>';
        
		//Вывод постраничной навигации
		if ($total > $kmess) {
            echo '<div class="topmenu">' . functions::display_pagination('index.php?', $start, $total, $kmess) . '</div>' .
                 '<p><form action="index.php" method="get"><input type="text" name="page" size="2"/>' .
                 '<input type="submit" value="' . $lng['to_page'] . ' &gt;&gt;"/></form></p>';
        }
		/*//Вывод панели перехода (1 2 3 ... 37 >>)
		if ($total > $kmess) echo '<div class="topmenu">' . functions::display_pagination('index.php?', $start, $total, $kmess) . '</div>';*/
		
		//Выводим панель переключений ("Гостевая | Админ-клуб | Очистить")
		/*if ($rights > 0) {
            $menu = array();
            $menu[] = isset($_SESSION['ga']) ? '<a href="index.php?act=ga">' . $lng['guestbook'] . '</a>' : '<b>' . $lng['guestbook'] . '</b>';
            $menu[] = isset($_SESSION['ga']) ? '<b>' . $lng['admin_club'] . '</b>' : '<a href="index.php?act=ga&amp;do=set">' . $lng['admin_club'] . '</a>';
            if ($rights >= 7)
                $menu[] = '<a href="index.php?act=clean">' . $lng['clear'] . '</a>';
            echo '<div class="topmenu">' . functions::display_menu($menu) . '</div>';
        }*/
    }
    break;
}

require('../incfiles/end.php');
?>